#include <fuquOS/pit.h>
#include <fuquOS/io.h>
#include <fuquOS/printk.h>

// 声明外部变量 tick，它在 idt_table.c 中定义
extern volatile u32 tick;

void pit_init()
{
    printk("Initializing PIT...\n");
    // 计算分频值：PIT输入频率为1.193182MHz
    u16 divisor = 1193182 / PIT_FREQUENCY;
    
    // 发送命令字节到PIT命令端口
    // 0x36 = 00110110
    // - 00: 通道0（连接到IRQ0）
    // - 11: 低字节+高字节访问模式
    // - 011: 模式3（方波发生器）
    // - 0: 16位二进制计数
    outb(PIT_CMD_PORT, 0x36);
    
    // 发送分频值（先低字节，后高字节）
    outb(PIT_DATA_PORT, divisor & 0xFF);         // 低字节
    outb(PIT_DATA_PORT, (divisor >> 8) & 0xFF);  // 高字节
    
    printk("PIT initialized with frequency %d Hz\n", PIT_FREQUENCY);
}

// 获取当前系统时钟计数
u32 get_tick_count() {
    return tick;
}

